package modelo;

import geometria.Coordenada;
import geometria.Segmento;

/**
 * 
 * Pista que permite el ingreso de aeronaves a traves de cualquiera de sus
 * extremos.
 * 
 */
public class PistaDobleEntrada extends Pista {

	Segmento cabecera;
	Segmento tope;

	public PistaDobleEntrada(Coordenada pos, Double angulo) {
		this.posicion = pos;
		this.angulo = angulo;
		this.maxCarreteo = 200D;
		this.maxPeso = 100D;
		this.ancho = 90D;
		this.largo = 270D;
		this.generarLimites(pos, angulo);
	}

	@Override
	public boolean esAproximacionValida(Coordenada origen, Coordenada destino) {
		Segmento trayectoria = new Segmento(origen, destino);
		return ((trayectoria.intersecaCon(this.cabecera) || trayectoria
				.intersecaCon(this.tope)) && this.limites.contiene(destino));
	}

	@Override
	protected void generarLimites(Coordenada pos, Double rotacion) {
		Coordenada c1, c2, c3, c4;

		super.generarLimites(pos, rotacion);
		// estas son las coordenadas de un extremo
		c1 = new Coordenada(pos.getX() - ancho / 2, pos.getY() - largo / 2);
		c2 = new Coordenada(pos.getX() + this.ancho / 2, pos.getY() - largo / 2);

		// estas son las coordenadas del otro extremo
		c3 = new Coordenada(pos.getX() - ancho / 2, pos.getY() + largo / 2);
		c4 = new Coordenada(pos.getX() + ancho / 2, pos.getY() + largo / 2);

		this.cabecera = new Segmento(c1, c2);
		this.tope = new Segmento(c3, c4);

		this.cabecera = this.cabecera.getLineaGirada(rotacion,
				this.limites.getCoordenadaCentral());
		this.tope = this.tope.getLineaGirada(rotacion,
				this.limites.getCoordenadaCentral());

		return;

	}

	public Segmento getCabecera() {
		return this.cabecera;
	}

	public Segmento getTope() {
		return this.tope;

	}

}
